package com.nkzy.controller;

import com.nkzy.pojo.Result;
import com.nkzy.pojo.User;
import com.nkzy.service.UserService;
import com.nkzy.utils.JwtUtil;
import com.nkzy.utils.Md5Util;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.Pattern;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

//@Controller:也是控制器的注解，返回值是字符串
@RestController  //这个注册说明类是一个控制器，并且返回值为JSON对象
@RequestMapping("/user")
@Validated
public class UserController {
    //控制器是前端和后端交互的桥梁，在这个类中要编写多个方法（接口）
    @Resource
    private UserService userService;
    //注册的方法
    @PostMapping("/register")
    public Result register(@Pattern(regexp = "^\\S{5,16}$") String username,
                           @Pattern(regexp = "^\\S{5,16}$") String password){
        //对用户名和密码要进行校验：1.在pom中加依赖2.对参数加正则表达式3.类上加上@Validated
        //1.查询用户
        User user = userService.findUserByName(username);
        if(user==null){
            //注册
            userService.register(username,password);
            return Result.success();
        }else{
           //存在
           return Result.error("用户名已被占用");
        }
    }
    @PostMapping("/login")
    //登陆的方法

    public Result login(@Pattern(regexp = "^\\S{5,16}$") String username,
                        @Pattern(regexp = "^\\S{5,16}$") String password){
        //1.根据用户名查找用户
        //2.判断用户是否存在
        //3.如果用户存在，需要再判断密码是否一致（因为表中的密码是加密的，所以需要对输入的密码加密再对比）
        User loginuser = userService.findUserByName(username);
        if(loginuser==null){
            return Result.error("用户不存在");
        }else{
            //存在
            String md5String = Md5Util.getMD5String(password);
            if (md5String.equals(loginuser.getPassword())){
                //相等，说明登录成功
                //生成令牌
                HashMap<String, Object> claims = new HashMap<>();
                claims.put("id",loginuser.getId());
                claims.put("username",loginuser.getUsername());
                String token = JwtUtil.genToken(claims);
                //返回token
                return Result.success(token);
            }else {
                return Result.error("密码错误");
            }

        }


    }
}






















































